package com.example.java.newFeature;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.zone.ZoneRules;
import java.time.zone.ZoneRulesProvider;

public class LocalDateDemo {
    public static void main(String[] args) {
        // String date = LocalDate.now().format(DateTimeFormatter.ISO_DATE);

        // 获取当前日期
        LocalDate today = LocalDate.now();           // 2023-10-05
        System.out.println(today);

        // 获取当前日期是该周的星期几
        System.out.println("获取当前日期是该周的星期几： 今天是星期" + today.getDayOfWeek().getValue());
        // 获取当前日期是一年中的第几天，例如 66
        System.out.println("获取当前日期是一年中的第几天： 今年已经过了" + today.getDayOfYear() + "天");
        // 获取当前日期是一月中的第几天，返回值是一个从1到31之间的整数，表示当前日期是该月的哪一天
        System.out.println("获取当前日期是一月中的第几天： 今天是这个月的第" + today.getDayOfMonth() + "天");

        // 获取当前日期是哪一年，例如 2023
        System.out.println("获取当前日期是哪一年： 今天是" + today.getYear() + "年");
        // 获取当前日期是哪一月，例如 2
        // 返回一个Month枚举对象，Month枚举包含了所有12个月份（从JANUARY到DECEMBER）。
        // 你可以通过这个方法获取到月份的详细信息，如果需要将其转换为基本数据类型，
        // 可以调用getMonth().getValue()来获取一个从1到12的整数表示当前是哪个月。
        System.out.println("获取当前日期是哪一月： 今天是" + today.getMonth().getValue() + "月");

        // 判断是否为闰年，如果该年份是闰年，则返回 true；否则返回 false。
        System.out.println(today.isLeapYear() ? "是闰年" : "不是闰年");

        // 获取当前日期的加减操作
        LocalDate tomorrow = today.plusDays(1);
        System.out.println("明天是： " + tomorrow);
        LocalDate plusWeeks = today.plusWeeks(1);
        System.out.println("一周后是： " + plusWeeks);
        LocalDate plusMonths = today.plusMonths(1);
        System.out.println("一个月后是： " + plusMonths);
        LocalDate plusYears = today.plusYears(1);
        System.out.println("一年后是： " + plusYears);
        LocalDate yesterday = today.minusDays(1);
        System.out.println("昨天是： " + yesterday);

        // 获取当前时间
        LocalTime currentTime = LocalTime.now();     // 15:30:45.123
        System.out.println("当前时间是： " + currentTime);
        String formattedLocalTime = currentTime.format(DateTimeFormatter.ofPattern("HH:mm:ss"));
        System.out.println("当前时间格式化后是： " + formattedLocalTime);
        // 获取当前日期和时间
        LocalDateTime now = LocalDateTime.now();     // 2023-10-05T15:30:45.123
        System.out.println("现在是： " + now);
        String formattedDateTime = now.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
        System.out.println("格式化后现在是： " + formattedDateTime);
        // 获取当前时间戳
        Instant timestamp = Instant.now();           // 2023-10-05T07:30:45.123Z（UTC 时间）
        System.out.println(timestamp);

        // 自定义格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");

        // 时区处理
        ZoneId newYorkZone = ZoneId.of("America/New_York");
        ZonedDateTime newYorkTime = ZonedDateTime.now(newYorkZone); // 纽约当前时间
        System.out.println("纽约当前时间： " + newYorkTime);
        String formattedZonedDateTime = newYorkTime.format(formatter);
        System.out.println("格式化后的纽约当前时间： " + formattedZonedDateTime);

        ZoneId beijingZone = ZoneId.of("Asia/Shanghai");
        ZonedDateTime beijingTime = ZonedDateTime.now(beijingZone);
        System.out.println("北京当前时间： " + beijingTime);
        String formattedZonedDateTime1 = beijingTime.format(formatter);
        System.out.println("格式化后的北京当前时间： " + formattedZonedDateTime1);
    }
}
